<?php

class Utility {

    public static function createGUID($namespace = '') {
        static $guid = '';
        $uid = uniqid("", true);
        $data = $namespace;
        $data .= $_SERVER['REQUEST_TIME'];  // The timestamp of the start of the request
        $data .= $_SERVER['HTTP_USER_AGENT'];   // A typical example is: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)
        $data .= $_SERVER['REMOTE_ADDR'];   // The IP address from which the user is viewing the current page. 
        $data .= $_SERVER['REMOTE_PORT'];   // The port being used on the user's machine to communicate with the web server
        $hash = strtolower(hash('ripemd128', $uid . $guid . md5($data)));
        $guid = substr($hash, 0, 8) .
                '-' .
                substr($hash, 8, 4) .
                '-' .
                substr($hash, 12, 4) .
                '-' .
                substr($hash, 16, 4) .
                '-' .
                substr($hash, 20, 12);
        return $guid;
    }

    public function server_parse($socket, $expected_response) {
        $server_response = '';
        while (substr($server_response, 3, 1) != ' ') {
            if (!($server_response = fgets($socket, 256)))
                echo 'Lỗi.', __FILE__, __LINE__;
        }

        if (!(substr($server_response, 0, 3) == $expected_response))
            echo '"Lỗi"' . $server_response . '"', __FILE__, __LINE__;
    }

    public function smtp_mail($to, $subject, $message, $headers = '') {
        $recipients = explode(',', $to);
        $user = 'quantri.bochihuy@gmail.com';
        $pass = 'quantri.bochihuy1';
        $smtp_host = 'ssl://smtp.gmail.com';
        $smtp_port = 465;

        try {
            if (!($socket = fsockopen($smtp_host, $smtp_port, $errno, $errstr, 15)))
                echo "'Lỗi'$smtp_host' ($errno) ($errstr)", __FILE__, __LINE__;

            server_parse($socket, '220');

            fwrite($socket, 'EHLO ' . $smtp_host . "\r\n");
            server_parse($socket, '250');

            fwrite($socket, 'AUTH LOGIN' . "\r\n");
            server_parse($socket, '334');

            fwrite($socket, base64_encode($user) . "\r\n");
            server_parse($socket, '334');

            fwrite($socket, base64_encode($pass) . "\r\n");
            server_parse($socket, '235');



            fwrite($socket, 'MAIL FROM: <example@gmail.com>' . "\r\n");
            server_parse($socket, '250');

            foreach ($recipients as $email) {
                fwrite($socket, 'RCPT TO: <' . $email . '>' . "\r\n");
                server_parse($socket, '250');
            }

            fwrite($socket, 'DATA' . "\r\n");
            server_parse($socket, '354');

            fwrite($socket, 'Subject: ' . $subject . "\r\n" . 'To: <' . implode('>, <', $recipients) . '>' . "\r\n" . $headers . "\r\n\r\n" . $message . "\r\n");

            fwrite($socket, '.' . "\r\n");
            server_parse($socket, '250');

            fwrite($socket, 'QUIT' . "\r\n");
            fclose($socket);

            return true;
        } catch (PDOException $exc) {
            return $exc->getMessage();
        }
    }

    // ham chuyen trang 
    public static function redirect($url) {
        if ($url == 'back') {
            echo "<script>window.history.back(2)</script>\n";
        } else {
            /* kiem tra neu header already by send thi chuyen trang = script nguoc lai chuyen trang = code server */
            if (headers_sent()) {
                echo "<script>document.location.href='$url';</script>\n";
            } else {
                ob_end_clean(); // clear output buffer
                header('HTTP/1.1 301 Moved Permanently');
                header("Location: $url");
            }
        }
        exit();
    }

    public static function redirectCurrentPage() {
        $url = $_SERVER['HTTP_REFERER'];

        /* kiem tra neu header already by send thi chuyen trang = script nguoc lai chuyen trang = code server */
        if (headers_sent()) {
            echo "<script>document.location.href='$url';</script>\n";
        } else {
            ob_end_clean(); // clear output buffer
            header('HTTP/1.1 301 Moved Permanently');
            header("Location: $url");
        }

        exit();
    }

    // ham dinh dang kieu ngay thang thang trong mysql
    public static function formatDateTime($date, $hour = null, $minute = null) {
        if ($hour == null && $minute == null) {
            return substr($date, -4) . "/" . substr($date, 3, 2) . "/" . substr($date, 0, 2) . " " . date('h:i:s');
        } else {
            return substr($date, -4) . "/" . substr($date, 3, 2) . "/" . substr($date, 0, 2) . " " . $hour . ':' . $minute . ':00';
        }
    }

    // chuyen kieu ngay thang trong mysql de hien thi ra ngoai
    public static function formatDateTimeToView($date, $haveTime = false) {
        if ($haveTime == true) {
            return substr($date, 11, 5) . ' - ' . substr($date, 8, 2) . "/" . substr($date, 5, 2) . "/" . substr($date, 0, 4);
        } else {
            return substr($date, 8, 2) . "/" . substr($date, 5, 2) . "/" . substr($date, 0, 4);
        }
    }

    // ham go bo dau cua 1 chuoi
    public static function removeSigns($text, $tolower = false) {
//        $text = str_replace('Đ', 'D', $text);
//        $unicode = array(
//            'a' => 'ä|à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ',
//            'd' => 'đ|Đ',
//            'D' => 'Ð',
//            'e' => 'è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ',
//            'i' => 'ì|í|î|ị|ỉ|ĩ',
//            'o' => 'ö|ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ',
//            'u' => 'ü|ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ',
//            'y' => 'ỳ|ý|ỵ|ỷ|ỹ',
//            'A' => 'Ä|À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ',
//            'E' => 'È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ',
//            'I' => 'Ì|Í|Ị|Ỉ|Ĩ',
//            'O' => 'Ö|Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ',
//            'U' => 'Ü|Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ',
//            'Y' => 'Ỳ|Ý|Ỵ|Ỷ|Ỹ',
//        );
//
//        foreach ($unicode as $nonUnicode => $uni) {
//
//            $text = preg_replace("/($uni)/i", $nonUnicode, $text);
//        }



        /* Mảng chứa tất cả ký tự có dấu trong Tiếng Việt */
        $marTViet = array("à", "á", "ạ", "ả", "ã", "â", "ầ", "ấ", "ậ", "ẩ", "ẫ", "ă",
            "ằ", "ắ", "ặ", "ẳ", "ẵ", "è", "é", "ẹ", "ẻ", "ẽ", "ê", "ề",
            "ế", "ệ", "ể", "ễ",
            "ì", "í", "ị", "ỉ", "ĩ",
            "ò", "ó", "ọ", "ỏ", "õ", "ô", "ồ", "ố", "ộ", "ổ", "ỗ", "ơ",
            "ờ", "ớ", "ợ", "ở", "ỡ",
            "ù", "ú", "ụ", "ủ", "ũ", "ư", "ừ", "ứ", "ự", "ử", "ữ",
            "ỳ", "ý", "ỵ", "ỷ", "ỹ",
            "đ",
            "À", "Á", "Ạ", "Ả", "Ã", "Â", "Ầ", "Ấ", "Ậ", "Ẩ", "Ẫ", "Ă",
            "Ằ", "Ắ", "Ặ", "Ẳ", "Ẵ",
            "È", "É", "Ẹ", "Ẻ", "Ẽ", "Ê", "Ề", "Ế", "Ệ", "Ể", "Ễ",
            "Ì", "Í", "Ị", "Ỉ", "Ĩ",
            "Ò", "Ó", "Ọ", "Ỏ", "Õ", "Ô", "Ồ", "Ố", "Ộ", "Ổ", "Ỗ", "Ơ", "Ờ", "Ớ", "Ợ", "Ở", "Ỡ",
            "Ù", "Ú", "Ụ", "Ủ", "Ũ", "Ư", "Ừ", "Ứ", "Ự", "Ử", "Ữ",
            "Ỳ", "Ý", "Ỵ", "Ỷ", "Ỹ",
            "Đ", " ");

        /* Mảng chứa tất cả ký tự không dấu tương ứng với mảng $marTViet bên trên */
        $marKoDau = array("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a",
            "a", "a", "a", "a", "a", "a",
            "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e",
            "i", "i", "i", "i", "i",
            "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o", "o",
            "o", "o", "o", "o", "o",
            "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u",
            "y", "y", "y", "y", "y",
            "d",
            "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A",
            "A", "A", "A", "A", "A",
            "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E",
            "I", "I", "I", "I", "I",
            "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O",
            "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U",
            "Y", "Y", "Y", "Y", "Y",
            "D", "-");

        if ($tolower) {
            $text = strtolower(str_replace($marTViet, $marKoDau, $text));
        } else {
            $text = str_replace($marTViet, $marKoDau, $text);
        }



        $text = str_replace('ç', 'c', $text);
        $text = str_replace('Ç', 'C', $text);
        $text = str_replace(' / ', '-', $text);
        $text = str_replace('/', '-', $text);
        $text = str_replace(' - ', '-', $text);
        $text = str_replace('_', '-', $text);
        $text = str_replace(' ', '-', $text);
        $text = str_replace(',', '', $text);
        $text = str_replace('.', '', $text);
        $text = str_replace('ß', 'ss', $text);
        $text = str_replace('&amp;', '', $text);
        $text = str_replace('%', '', $text);
        $text = str_replace(':', '', $text);
        $text = str_replace('?', '', $text);
        $text = str_replace('’', '', $text);
        $text = str_replace('‘', '', $text);
        $text = str_replace('“', '', $text);
        $text = str_replace('”', '', $text);
        $text = str_replace('"', '', $text);
        $text = str_replace('(', '', $text);
        $text = str_replace(')', '', $text);


        $text = preg_replace('[^A-Za-z0-9]', '', $text);

        return $text;
    }

    public static function replaceHtmlSpecialChars($t = "") {
        $t = str_replace("\\", "", $t);
        return $t;
    }

    // kiem tra duoi file co hop le
    public static function checkFileExtension($valid_formats, $ext) {
        if (in_array($ext, $valid_formats)) {
            return false;
        }
    }

    // hàm tạo session
    public static function createSession($names, $values) {
        //session_start();

        if ($names != null) {
            // tương ứng với mỗi giá trị trong mảng tên thì sẽ tạo ra 1 session
            for ($i = 0; $i < count($names); $i++) {
                $_SESSION[$names[$i]] = $values[$i];
            }
        }
    }

    // hàm hủy session
    public static function destroySession() {
        //session_start();
        session_unset();
    }

    // hiển thị thông báo
    public static function messageBox($message, $url = null) {
        echo '<script language="javascript" type="text/javascript">';
        echo 'alert("' . $message . '");';
        if ($url != null) {
            echo 'document.location.href="' . $url . '"';
        }
        echo '</script>';
    }

    public static function reload() {
        echo "<script>window.location.reload();</script>";
    }

    /**
     * hàm cắt chuỗi theo độ dài
     * @param type $string: chuỗi gốc muốn cắt
     * @param type $lenghtToCut: độ dài muốn cắt
     * @param type $endcode: chuỗi có phải unicode không
     * @return string: chuỗi sau khi được cắt     
     */
    public static function subString($string, $lenghtToCut, $endcode) {

        if ($endcode == true) {

            if (mb_strlen($string, 'UTF-8') > $lenghtToCut) {

                $string = mb_substr($string, 0, $lenghtToCut, 'UTF-8');

                $lenght = mb_strlen($string, 'UTF-8');

                // cắt bỏ các ký tự dư thừa
                while (mb_substr($string, $lenght - 1, $lenght, 'UTF-8') != ' ') {
                    $lenght--;
                    $string = mb_substr($string, 0, $lenght, 'UTF-8');
                }
                return $string . '...';
            } else {

                return $string;
            }
        } else {

            $string = substr($string, 0, $lenghtToCut);

            $lenght = strlen($string);

            // cắt bỏ các ký tự dư thừa
            while (substr($string, $lenght - 1, $lenght) != ' ') {
                $lenght--;
                $string = substr($string, 0, $lenght);
            }

            $string = $string . '...';

            return $string;
        }
    }

    // hàm tải chuỗi html hiển thị danh sách chọn số lượng dòng hiển thị
//    public static function getLimitList($rowToView) {
//        $limitListHTML = '';
//        // tải danh sách chọn số dòng hiển thị trên trang
//        for ($j = 5; $j <= 50; $j = $j + 5) {
//            // nếu có biến post categoryID 
//            // (tức là có chọn thì hiển thị lại cái đã chọn trong danh sách)
//            if ($rowToView == $j) {
//                $limitListHTML .= "<option value='$j' selected>$j</option>";
//            } else {
//                $limitListHTML .= "<option value='$j'>$j</option>";
//            }
//        }
//        return $limitListHTML;
//    }
    // hàm tải chuỗi html hiển thị danh sách chọn số lượng dòng hiển thị
    public static function getLimitList($rowToView) {
        $limitListHTML = '<option value="5" selected>5</option>';
        // tải danh sách chọn số dòng hiển thị trên trang
        for ($j = 10; $j <= 100; $j = $j + 10) {
            // nếu có biến post categoryID 
            // (tức là có chọn thì hiển thị lại cái đã chọn trong danh sách)
            if ($rowToView == $j) {
                $limitListHTML .= "<option value='$j' selected>$j</option>";
            } else {
                $limitListHTML .= "<option value='$j'>$j</option>";
            }
        }
        return $limitListHTML;
    }

    public static function getPagination($cur_page, $no_of_paginations) {

        if ($cur_page >= 7) {
            $start_loop = $cur_page - 3;
            if ($no_of_paginations > $cur_page + 3)
                $end_loop = $cur_page + 3;
            else if ($cur_page <= $no_of_paginations && $cur_page > $no_of_paginations - 6) {
                $start_loop = $no_of_paginations - 6;
                $end_loop = $no_of_paginations;
            } else {
                $end_loop = $no_of_paginations;
            }
        } else {
            $start_loop = 1;
            if ($no_of_paginations > 7)
                $end_loop = 7;
            else
                $end_loop = $no_of_paginations;
        }


        $previous_btn = true;
        $next_btn = true;
        $first_btn = true;
        $last_btn = true;

        $paging = "<div class='d_pagination'><ul>";

        // FOR ENABLING THE FIRST BUTTON
        if ($first_btn && $cur_page > 1) {
            $paging .= "<li p='1' class='active'>Trang đầu</li>";
        } else if ($first_btn) {
            $paging .= "<li p='1' class='inactive'>Trang đầu</li>";
        }

        // FOR ENABLING THE PREVIOUS BUTTON
        if ($previous_btn && $cur_page > 1) {
            $pre = $cur_page - 1;
            $paging .= "<li p='$pre' class='active'>Trước</li>";
        } else if ($previous_btn) {
            $paging .= "<li class='inactive'>Trước</li>";
        }
        for ($i = $start_loop; $i <= $end_loop; $i++) {

            if ($cur_page == $i)
                $paging .= "<li p='$i' style='color:#fff;background-color:#006699;' class='active'>{$i}</li>";
            else
                $paging .= "<li p='$i' class='active'>{$i}</li>";
        }

        // TO ENABLE THE NEXT BUTTON
        if ($next_btn && $cur_page < $no_of_paginations) {
            $nex = $cur_page + 1;
            $paging .= "<li p='$nex' class='active'>Kế tiếp</li>";
        } else if ($next_btn) {
            $paging .= "<li class='inactive'>Kế tiếp</li>";
        }

        // TO ENABLE THE END BUTTON
        if ($last_btn && $cur_page < $no_of_paginations) {
            $paging .= "<li p='$no_of_paginations' class='active'>Trang cuối</li>";
        } else if ($last_btn) {
            $paging .= "<li p='$no_of_paginations' class='inactive'>Trang cuối</li>";
        }
        $paging = $paging . "</ul>";


        $goto = "<div class='goto' style='float:left; text-align:left'>
                    <input type='text' class='d_text_goto text_goto' size='5'/>
                    <input type='button' class='d_button_goto button_goto' value='Go'/>
                </div>";


        return $paging . $goto . '</div>';
    }

    /**
     * format a number to currency string
     * @param type $number: number to format
     * @return type string: currency string
     */
    public static function formatToCurrencyString($number) {
        return number_format($number, 0, ',', '.');
    }

    public static function getCurrentDate() {
        date_default_timezone_set('Asia/Ho_Chi_Minh');
        return date('Y-m-d H:i:s');
    }

    // hàm tính số lượng ngày là bao nhiêu giữa 2 ngày
    public static function daysBetweenDate($beginDate, $endDate) {
        $fromDate = date('Y-m-d', strtotime($beginDate));
        $toDate = date('Y-m-d', strtotime($endDate));

        $date_parts1 = explode('-', $fromDate);
        $date_parts2 = explode('-', $toDate);

        // Converts a Gregorian date to Julian Day Count
        $start_date = gregoriantojd($date_parts1[1], $date_parts1[2], $date_parts1[0]);
        $end_date = gregoriantojd($date_parts2[1], $date_parts2[2], $date_parts2[0]);
        return $end_date - $start_date;
    }

    public static function addToCart($itemID, $itemPrice, $quantity, $strProperty) {

        // total price of an item
        $totalPrice = $itemPrice * $quantity;

        // array of property
        $arrayProperty = array();


        if ($strProperty != '') {
            // convert string to array of property

            $properties = array();

            $properties = explode(',', $strProperty);

            for ($i = 0; $i < count($properties); $i++) {
                //property id
                $arrayProperty[$i][0] = $properties[$i];
                // is already
                $arrayProperty[$i][1] = '';
            }
        }


        // if exist 'cart session'
        if (isset($_SESSION['cart']) && count($_SESSION['cart']) > 0) {

            $isAlready = false;

            // UPDATE QUANTITY IF EXIST ITEM
            // ELSE ADD AN ITEM TO ARRAY
            for ($i = 0; $i < count($_SESSION['cart']); $i++) {
                // if exist array property
                if (count($arrayProperty) > 0) {
                    // loop each property and check the existence of the item (with property) in cart
                    // if exist then increase quantity
                    for ($y = 0; $y < count($arrayProperty); $y++) {
                        // loop each item in cart to check already
                        if ($_SESSION['cart'][$i]['itemID'] == $itemID && $_SESSION['cart'][$i]['propertyID'] == $arrayProperty[$y][0]) {
                            $_SESSION['cart'][$i]['quantity'] = $_SESSION['cart'][$i]['quantity'] + $quantity;
                            $_SESSION['cart'][$i]['totalEachItem'] = $_SESSION['cart'][$i]['totalEachItem'] + $totalPrice;
                            // is already
                            $arrayProperty[$y][1] = 1;
                        }
                    }
                } else {
                    // if exist the item
                    if ($_SESSION['cart'][$i]['itemID'] == $itemID && $_SESSION['cart'][$i]['propertyID'] == '') {
                        $_SESSION['cart'][$i]['quantity'] = $_SESSION['cart'][$i]['quantity'] + $quantity;
                        $_SESSION['cart'][$i]['totalEachItem'] = $_SESSION['cart'][$i]['totalEachItem'] + $totalPrice;
                        $isAlready = true;
                        break;
                    }
                }
            }

            if (count($arrayProperty) > 0) {
                // loop each property then add new item into cart if not exist
                for ($y = 0; $y < count($arrayProperty); $y++) {
                    if ($arrayProperty[$y][1] != 1) {
                        $_SESSION['cart'][] = array('itemID' => $itemID, 'totalEachItem' => $totalPrice, 'quantity' => $quantity, 'propertyID' => $arrayProperty[$y][0], 'itemPrice' => $itemPrice);
                    }
                }
            } else if ($isAlready == false) {
                $_SESSION['cart'][] = array('itemID' => $itemID, 'totalEachItem' => $totalPrice, 'quantity' => $quantity, 'propertyID' => '', 'itemPrice' => $itemPrice);
            }
        } else {
            // if exist array property
            if (count($arrayProperty) > 0) {
                // each property corresponding to one product
                for ($i = 0; $i < count($arrayProperty); $i++) {
                    $_SESSION['cart'][] = array('itemID' => $itemID, 'totalEachItem' => $totalPrice, 'quantity' => $quantity, 'propertyID' => $arrayProperty[$i][0], 'itemPrice' => $itemPrice);
                }
            } else {
                $_SESSION['cart'][] = array('itemID' => $itemID, 'totalEachItem' => $totalPrice, 'quantity' => $quantity, 'propertyID' => '', 'itemPrice' => $itemPrice);
            }
        }
    }

    public static function checkStringIn($stringIn, $string) {
        if (strpos($string, $stringIn) !== FALSE) {
            return true;
        } else {
            return false;
        }
    }

    public static function checkPermission($action, $groupFunctions, $functionID) {
        for ($i = 0; $i < count($groupFunctions); $i++) {

            if ($groupFunctions[$i]['functionID'] == $functionID) {
                switch ($action) {
                    case 'view':
                        if ($groupFunctions[$i]['view'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                    case 'add':
                        if ($groupFunctions[$i]['add'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                    case 'delete':
                        if ($groupFunctions[$i]['delete'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                    case 'update':
                        if ($groupFunctions[$i]['update'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                    case 'disable':
                        if ($groupFunctions[$i]['disable'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                    case 'enable':
                        if ($groupFunctions[$i]['enable'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                    case 'highlight':
                        if ($groupFunctions[$i]['highlight'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                    case 'unhighlight':
                        if ($groupFunctions[$i]['unhighlight'] == 1) {
                            return true;
                        } else {
                            return false;
                        }
                        break;
                }
                break;
            }
        }
    }

    // hàm tách câu thành mảng ký tự riêng biệt
    public static function search_split_terms($terms) {
        $terms = trim($terms);
        $terms = str_replace('.', ' ', $terms);
        $terms = str_replace(',', ' ', $terms);

        $terms = preg_replace("/\"(.*?)\"/e", "self::search_transform_term('\$1')", $terms);
        $terms = preg_split("/\s+|,/", $terms);
        $out = array();
        foreach ($terms as $term) {
            $term = preg_replace("/\{WHITESPACE-([0-9]+)\}/e", "chr(\$1)", $term);
            $term = preg_replace("/\{COMMA\}/", ",", $term);
            $out[] = $term;
        }
        return $out;
    }

    // hàm phụ
    public static function search_transform_term($term) {
        $term = preg_replace("/(\s)/e", "'{WHITESPACE-'.ord('\$1').'}'", $term);
        $term = preg_replace("/,/", "{COMMA}", $term);
        return $term;
    }

    // This function inserts a slash before each meta-character that MySQL uses
    public static function search_escape_rlike($string) {
        return preg_replace("/([.\[\]*^\$])/", '\\\$1', $string);
    }

    // make sure each term matches on word boundaries so that 'foo' matches 'a foo a' but not 'a food a'    
    public static function search_db_escape_terms($terms) {
        $out = array();
        foreach ($terms as $term) {
            $out[] = '[[:<:]]' . AddSlashes(self::search_escape_rlike($term)) . '[[:>:]]';
        }
        return $out;
    }

    public static function search_rx_escape_terms($terms) {
        $out = array();
        foreach ($terms as $term) {
            $out[] = '\b' . preg_quote($term, '/') . '\b';
        }
        return $out;
    }

    public static function fillSelectBox_Hour($xtemplate, $block, $selected = '') {

        for ($i = 0; $i < 24; $i++) {
            if ($selected != '') {

                if ($i == $selected) {
                    $xtemplate->assign('SELECTED', 'selected');
                } else {
                    $xtemplate->assign('SELECTED', '');
                }
            }
            $xtemplate->assign('VALUE', $i);
            $xtemplate->assign('TITLE', $i);
            $xtemplate->parse($block);
        }
    }

    public static function fillSelectBox_Minute($xtemplate, $block, $selected = '') {
        for ($i = 0; $i < 60; $i++) {
            if ($selected != '') {
                if ($i == $selected) {
                    $xtemplate->assign('SELECTED', 'selected');
                } else {
                    $xtemplate->assign('SELECTED', '');
                }
            }
            $xtemplate->assign('VALUE', $i);
            $xtemplate->assign('TITLE', $i);
            $xtemplate->parse($block);
        }
    }

}

?>